// demo_sdk.h
#pragma once
#include <string>
#include <cstdint>

namespace demo_sdk {

// 结构体定义（SWIG 可以自动处理）
struct Message {
    int id;
    std::string content;
    int64_t timestamp;
};

// 回调接口类（必须使用虚函数）
class IMessageObserver {
public:
    // 纯虚函数，必须实现
    virtual void onMessage(const Message& msg) = 0;
    virtual void onError(int error_code) = 0;
    
    // 虚析构函数（必须提供）
    virtual ~IMessageObserver() {}
};

// SDK 类
class MySDK {
public:
    // 接受接口类指针（不是 shared_ptr）
    int64_t listen(const std::string& topic, IMessageObserver* observer);
    void stop(int64_t listen_id);
    static const char* getVersion();
};

} // namespace demo_sdk
